package com.hello.system.domain;

import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.hello.common.core.annotation.Excel;
import com.hello.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 用户反馈建议对象 feedback
 * 
 * @author hello
 * @date 2025-10-29
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class Feedback extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 反馈ID（主键） */
    private Long feedbackId;

    /** 反馈类型（如bug、建议、投诉、咨询等） */
    @Excel(name = "反馈类型", readConverterExp = "如=bug、建议、投诉、咨询等")
    private String feedbackType;

    /** 反馈标题 */
    @Excel(name = "反馈标题")
    private String feedbackTitle;

    /** 反馈内容详情 */
    @Excel(name = "反馈内容详情")
    private String feedbackContent;

    /** 反馈截图/图片URL列表（JSON数组） */
    @Excel(name = "反馈截图/图片URL列表", readConverterExp = "J=SON数组")
    private String feedbackImages;

    /** 反馈分类（JSON，如功能模块、优先级等） */
    @Excel(name = "反馈分类", readConverterExp = "J=SON，如功能模块、优先级等")
    private String feedbackCategory;

    /** 反馈标签（JSON数组） */
    @Excel(name = "反馈标签", readConverterExp = "J=SON数组")
    private String feedbackTags;

    /** 反馈发生地点 */
    @Excel(name = "反馈发生地点")
    private String feedbackLocation;

    /** 反馈位置坐标（经纬度） */
    @Excel(name = "反馈位置坐标", readConverterExp = "经=纬度")
    private String feedbackCoordinates;

    /** 反馈提交时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "反馈提交时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date feedbackTime;

    /** 反馈用户ID（关联users表） */
    @Excel(name = "反馈用户ID", readConverterExp = "关=联users表")
    private Long userId;

    /** 用户手机号 */
    @Excel(name = "用户手机号")
    private String userPhone;

    /** 用户名 */
    @Excel(name = "用户名")
    private String username;

    /** 用户头像URL */
    @Excel(name = "用户头像URL")
    private String userAvatar;

    /** 联系方式（邮箱、微信等） */
    @Excel(name = "联系方式", readConverterExp = "邮=箱、微信等")
    private String contactInfo;

    /** APP版本号 */
    @Excel(name = "APP版本号")
    private String appVersion;

    /** 设备信息（JSON，包含系统版本、机型、网络等） */
    @Excel(name = "设备信息", readConverterExp = "J=SON，包含系统版本、机型、网络等")
    private String deviceInfo;

    /** 处理状态（0-待处理，1-处理中，2-已处理，3-已关闭） */
    @Excel(name = "处理状态", readConverterExp = "0=-待处理，1-处理中，2-已处理，3-已关闭")
    private Integer processStatus;

    /** 处理结果说明 */
    @Excel(name = "处理结果说明")
    private String processResult;

    /** 处理完成时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "处理完成时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date processTime;

    /** 处理人用户ID */
    @Excel(name = "处理人用户ID")
    private Long processorId;

    /** 处理人姓名 */
    @Excel(name = "处理人姓名")
    private String processorName;

    /** 满意度评分（1-5分，5分最满意） */
    @Excel(name = "满意度评分", readConverterExp = "1=-5分，5分最满意")
    private Integer satisfaction;

    /** 满意度评价意见 */
    @Excel(name = "满意度评价意见")
    private String satisfactionComment;

    /** 反馈状态（JSON，如是否公开、是否置顶等） */
    @Excel(name = "反馈状态", readConverterExp = "J=SON，如是否公开、是否置顶等")
    private String status;

    /** 额外扩展数据（JSON格式） */
    @Excel(name = "额外扩展数据", readConverterExp = "J=SON格式")
    private String extraData;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createdAt;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updatedAt;

    public void setFeedbackId(Long feedbackId) 
    {
        this.feedbackId = feedbackId;
    }

    public Long getFeedbackId() 
    {
        return feedbackId;
    }
    public void setFeedbackType(String feedbackType) 
    {
        this.feedbackType = feedbackType;
    }

    public String getFeedbackType() 
    {
        return feedbackType;
    }
    public void setFeedbackTitle(String feedbackTitle) 
    {
        this.feedbackTitle = feedbackTitle;
    }

    public String getFeedbackTitle() 
    {
        return feedbackTitle;
    }
    public void setFeedbackContent(String feedbackContent) 
    {
        this.feedbackContent = feedbackContent;
    }

    public String getFeedbackContent() 
    {
        return feedbackContent;
    }
    public void setFeedbackImages(String feedbackImages) 
    {
        this.feedbackImages = feedbackImages;
    }

    public String getFeedbackImages() 
    {
        return feedbackImages;
    }
    public void setFeedbackCategory(String feedbackCategory) 
    {
        this.feedbackCategory = feedbackCategory;
    }

    public String getFeedbackCategory() 
    {
        return feedbackCategory;
    }
    public void setFeedbackTags(String feedbackTags) 
    {
        this.feedbackTags = feedbackTags;
    }

    public String getFeedbackTags() 
    {
        return feedbackTags;
    }
    public void setFeedbackLocation(String feedbackLocation) 
    {
        this.feedbackLocation = feedbackLocation;
    }

    public String getFeedbackLocation() 
    {
        return feedbackLocation;
    }
    public void setFeedbackCoordinates(String feedbackCoordinates) 
    {
        this.feedbackCoordinates = feedbackCoordinates;
    }

    public String getFeedbackCoordinates() 
    {
        return feedbackCoordinates;
    }
    public void setFeedbackTime(Date feedbackTime) 
    {
        this.feedbackTime = feedbackTime;
    }

    public Date getFeedbackTime() 
    {
        return feedbackTime;
    }
    public void setUserId(Long userId) 
    {
        this.userId = userId;
    }

    public Long getUserId() 
    {
        return userId;
    }
    public void setUserPhone(String userPhone) 
    {
        this.userPhone = userPhone;
    }

    public String getUserPhone() 
    {
        return userPhone;
    }
    public void setUsername(String username) 
    {
        this.username = username;
    }

    public String getUsername() 
    {
        return username;
    }
    public void setUserAvatar(String userAvatar) 
    {
        this.userAvatar = userAvatar;
    }

    public String getUserAvatar() 
    {
        return userAvatar;
    }
    public void setContactInfo(String contactInfo) 
    {
        this.contactInfo = contactInfo;
    }

    public String getContactInfo() 
    {
        return contactInfo;
    }
    public void setAppVersion(String appVersion) 
    {
        this.appVersion = appVersion;
    }

    public String getAppVersion() 
    {
        return appVersion;
    }
    public void setDeviceInfo(String deviceInfo) 
    {
        this.deviceInfo = deviceInfo;
    }

    public String getDeviceInfo() 
    {
        return deviceInfo;
    }
    public void setProcessStatus(Integer processStatus) 
    {
        this.processStatus = processStatus;
    }

    public Integer getProcessStatus() 
    {
        return processStatus;
    }
    public void setProcessResult(String processResult) 
    {
        this.processResult = processResult;
    }

    public String getProcessResult() 
    {
        return processResult;
    }
    public void setProcessTime(Date processTime) 
    {
        this.processTime = processTime;
    }

    public Date getProcessTime() 
    {
        return processTime;
    }
    public void setProcessorId(Long processorId) 
    {
        this.processorId = processorId;
    }

    public Long getProcessorId() 
    {
        return processorId;
    }
    public void setProcessorName(String processorName) 
    {
        this.processorName = processorName;
    }

    public String getProcessorName() 
    {
        return processorName;
    }
    public void setSatisfaction(Integer satisfaction) 
    {
        this.satisfaction = satisfaction;
    }

    public Integer getSatisfaction() 
    {
        return satisfaction;
    }
    public void setSatisfactionComment(String satisfactionComment) 
    {
        this.satisfactionComment = satisfactionComment;
    }

    public String getSatisfactionComment() 
    {
        return satisfactionComment;
    }
    public void setStatus(String status) 
    {
        this.status = status;
    }

    public String getStatus() 
    {
        return status;
    }
    public void setExtraData(String extraData) 
    {
        this.extraData = extraData;
    }

    public String getExtraData() 
    {
        return extraData;
    }
    public void setCreatedAt(Date createdAt) 
    {
        this.createdAt = createdAt;
    }

    public Date getCreatedAt() 
    {
        return createdAt;
    }
    public void setUpdatedAt(Date updatedAt) 
    {
        this.updatedAt = updatedAt;
    }

    public Date getUpdatedAt() 
    {
        return updatedAt;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("feedbackId", getFeedbackId())
            .append("feedbackType", getFeedbackType())
            .append("feedbackTitle", getFeedbackTitle())
            .append("feedbackContent", getFeedbackContent())
            .append("feedbackImages", getFeedbackImages())
            .append("feedbackCategory", getFeedbackCategory())
            .append("feedbackTags", getFeedbackTags())
            .append("feedbackLocation", getFeedbackLocation())
            .append("feedbackCoordinates", getFeedbackCoordinates())
            .append("feedbackTime", getFeedbackTime())
            .append("userId", getUserId())
            .append("userPhone", getUserPhone())
            .append("username", getUsername())
            .append("userAvatar", getUserAvatar())
            .append("contactInfo", getContactInfo())
            .append("appVersion", getAppVersion())
            .append("deviceInfo", getDeviceInfo())
            .append("processStatus", getProcessStatus())
            .append("processResult", getProcessResult())
            .append("processTime", getProcessTime())
            .append("processorId", getProcessorId())
            .append("processorName", getProcessorName())
            .append("satisfaction", getSatisfaction())
            .append("satisfactionComment", getSatisfactionComment())
            .append("status", getStatus())
            .append("extraData", getExtraData())
            .append("createdAt", getCreatedAt())
            .append("updatedAt", getUpdatedAt())
            .toString();
    }
}
